<?php

namespace common\utils;

/**
 *
 */
class General
{

    public static function subText($text, $length, $replace)
    {
        if (mb_strlen($text, 'utf8') > $length) {
            return mb_substr($text, 0, $length, 'utf8') . $replace;
        }
        return $text;
    }

    public static function isInt($num)
    {
        $reg = '/^[0-9][0-9]*$/';
        return preg_match($reg, $num);
    }

    public static function isMoney($num)
    {
        $reg = '/^[0-9]+(.[0-9]{0,2})?$/';
        return preg_match($reg, $num);
    }

    public static function reeChar($strParam)
    {
        $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/";
        $qian = array(" ", "　", "\t", "\n", "\r");
        $cv = preg_replace($regex, "", $strParam);
        return str_replace($qian, '', $cv);
    }

    public static function hidtel($phone)
    {
        $IsWhat = preg_match('/(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)/i', $phone); //固定电话
        if ($IsWhat == 1) {
            return preg_replace('/(0[0-9]{2,3}[\-]?[2-9])[0-9]{3,4}([0-9]{3}[\-]?[0-9]?)/i', '$1****$2', $phone);
        } else {
            return preg_replace('/(1[358]{1}[0-9])[0-9]{4}([0-9]{4})/i', '$1****$2', $phone);
        }
    }

    /**
     * @param $text
     * @param string $replaceTo
     * @return string|string[]|null
     */
    public static function filterEmoji($text, $replaceTo = '')
    {
        $clean_text = "";
        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, $replaceTo, $text);
        // Match Miscellaneous Symbols and Pictographs
        $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
        $clean_text = preg_replace($regexSymbols, $replaceTo, $clean_text);
        // Match Transport And Map Symbols
        $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
        $clean_text = preg_replace($regexTransport, $replaceTo, $clean_text);
        // Match Miscellaneous Symbols
        $regexMisc = '/[\x{2600}-\x{26FF}]/u';
        $clean_text = preg_replace($regexMisc, $replaceTo, $clean_text);
        // Match Dingbats
        $regexDingbats = '/[\x{2700}-\x{27BF}]/u';
        $clean_text = preg_replace($regexDingbats, $replaceTo, $clean_text);
        return $clean_text;
    }

    public static function filterEmoji2($str)
    {
//        $str = base64_decode($str);
        $str = preg_replace_callback('/./u',
            function (array $match) {
                return strlen($match[0]) >= 4 ? '' : $match[0];
            },
            $str);
        $str = str_replace('\'', '', $str);
//        $str = iconv('gb2312//ignore', 'utf-8', iconv('utf-8', 'gb2312//ignore', $str));
        return $str;
    }

    /**
     * 获取随机长度字符串
     * @param int $length
     */
    public static function validCode($length = 6)
    {
        $str = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
        $stringArr = [];
        for ($i = 0; $i < $length; $i++) {
            $stringArr[] = $str[rand(0, 35)];
        }
        return join('', $stringArr);
    }

    public static function getRange()
    {
        $numbers = range(1, 10);
        //shuffle 将数组顺序随即打乱
        shuffle($numbers);
        //array_slice 取该数组中的某一段
        $num = 6;
        $result = array_slice($numbers, 0, $num);
        return implode('', $result);
    }

    public static function getRandomCapitalLetter()
    {
        // 随机数在65（A）到90（Z）之间
        $randomNumber = rand(65, 90);
        // 将随机数转换成对应的大写字母
        $capitalLetter = chr($randomNumber);
        return $capitalLetter;
    }

    public static function getRandomString($length = 4)
    {
        $characters = '0123456789';
        $charactersLength = strlen($characters);
        $randomString = '';

        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }

        return $randomString;
    }

    //验证数字：^[0-9]*$
//验证n位的数字：^\d{n}$
//验证至少n位数字：^\d{n,}$
//验证m-n位的数字：^\d{m,n}$
//验证零和非零开头的数字：^(0|[1-9][0-9]*)$
//验证有两位小数的正实数：^[0-9]+(.[0-9]{2})?$
//验证有1-3位小数的正实数：^[0-9]+(.[0-9]{1,3})?$
//验证非零的正整数：^\+?[1-9][0-9]*$
//验证非零的负整数：^\-[1-9][0-9]*$
//验证非负整数（正整数 + 0）  ^\d+$
//验证非正整数（负整数 + 0）  ^((-\d+)|(0+))$
//验证长度为3的字符：^.{3}$
//验证由26个英文字母组成的字符串：^[A-Za-z]+$
//验证由26个大写英文字母组成的字符串：^[A-Z]+$
//验证由26个小写英文字母组成的字符串：^[a-z]+$
//验证由数字和26个英文字母组成的字符串：^[A-Za-z0-9]+$
//验证由数字、26个英文字母或者下划线组成的字符串：^\w+$
//验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为：以字母开头，长度在6-18之间，只能包含字符、数字和下划线。
//验证是否含有 ^%&‘,;=?$\” 等字符：[^%&‘,;=?$\x22]+
//验证汉字：^[\u4e00-\u9fa5],{0,}$
//验证Email地址：^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
//验证InternetURL：^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ；^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
//验证电话号码：^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$：–正确格式为：XXXX-XXXXXXX，XXXX-XXXXXXXX，XXX-XXXXXXX，XXX-XXXXXXXX，XXXXXXX，XXXXXXXX。
//验证身份证号（15位或18位数字）：^\d{15}|\d{}18$
//验证一年的12个月：^(0?[1-9]|1[0-2])$ 正确格式为：“01”-“09”和“1”“12”
//验证一个月的31天：^((0?[1-9])|((1|2)[0-9])|30|31)$    正确格式为：01、09和1、31。
//整数：^-?\d+$
//非负浮点数（正浮点数 + 0）：^\d+(\.\d+)?$
//正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
//非正浮点数（负浮点数 + 0） ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
//负浮点数  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
//浮点数  ^(-?\d+)(\.\d+)?
}
